package com.dzu.easy;

import com.dzu.common.ListNode;

/**
 * @author ZhaoDong
 * @date 2023/1/4 10:09
 * @description 203. 移除链表元素
 */
public class Test203 {

    public static void main(String[] args) {
        ListNode listNode1 = new ListNode(1);
        ListNode listNode2 = new ListNode(2);
        ListNode listNode3 = new ListNode(3);
        listNode1.next = listNode2;
        listNode2.next = listNode3;

        System.out.println(removeElements3(listNode1, 1));
    }

    /**
     * 递归最快
     * @param head
     * @param val
     * @return
     */
    public static ListNode removeElements3(ListNode head, int val) {
        if (head == null) {
            return null;
        }

        head.next = removeElements3(head.next, val);
        if (head.val == val) {
            return head.next;
        } else {
            return head;
        }
    }




        public static ListNode removeElements2(ListNode head, int val) {
        ListNode listNode = new ListNode(-1);
        listNode.next = head;
        ListNode temp = listNode;

        while (temp.next != null) {
            if (temp.next.val == val) {
                temp.next = temp.next.next;
            } else {
                temp = temp.next;
            }
        }
        return listNode.next;
    }



    public static ListNode removeElements(ListNode head, int val) {
        ListNode listNode = new ListNode(-1);
        ListNode temp = listNode;
        while (head != null) {
            if (head.val != val) {
                temp.next = head;
                temp = temp.next;
            }
            head = head.next;
        }
        temp.next = null;
        return listNode.next;
    }

}
